package web.jdbc;

import java.util.List;

public interface IQuerySQL<T> {
	/**执行目标SQL语句,为公共ResultSet赋值
	 * @param sql SQL语句
	 * @return 
	 * */
	IQuerySQL<T> executeSQL(String sql);
	
	/**获取查询列表 ，返回List&lt;Object[]&gt;类型数据
	 * @return 
	 * */
	List<Object[]> getResultList();
	
	/**获取查询列表 ，返回对应类型的List&lt;T&gt;
	 * @param clazz 实体对象
	 * */
	List<T> getResultList(Class<?> clazz);
	
	/**通过实体主键更新数据
	 * @param t 实体对象
	 * */
	T updateData(T t);
	
	/**通过executeQuery(String sql)执行sql查询一条数据，填充到实体对象并返回
	 * @param clazz 要返回的类型 
	 * */
	T getSingleResult(Class<?> clazz);
	
	/**通过executeQuery(String sql)执行sql查询一条数据，返回一个Object[]对象
	 * */
	Object[] getSingleResult();
	
	/**添加一条新数据，如果主键不是自增，则不可为空
	 * @param t 实体对象
	 * */
	boolean insertData(T t);
	
	/**<pre>
	 * 删除一条数据,如果主键不为空，按主键值删除一条数据，
	 * <b>如果主键值为空，将删除所有满足其他实体属性值条件的数据</b></pre>
	 * @param t 实体对象
	 * */
	void deleteData(T t);
	
	/**按主键值查询一条数据
	 * @param t 实体对象
	 * */
	T selectData(T t);
	
}
